#Copyright 2012 César Serrano López
#This program is free software: you can redistribute it and/or modify it 
#under the terms of the GNU General Public License as published by the 
#Free Software Foundation, either version 3 of the License, or (at your
#option) any later version.

#This program is distributed in the hope that it will be useful, but
#WITHOUT ANY WARRANTY; without even the implied warranty of 
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
#Public License for more details.
#You should have received a copy of the GNU General Public License along 
#with this program. If not, see <http://www.gnu.org/licenses/>


#!/usr/bin/perl
use Tk;
use controlador;
my $controlador = new controlador();

my $ventana;
my $menu;
my $etiqueta;
my $ultima_ventana=-1;

my $labDatosPersonales_nuevoAlumno;
my $labDni_nuevoAlumno;
my $entDni_nuevoAlumno;
my $labNombre_nuevoAlumno;
my $entNombre_nuevoAlumno;
my $labApellido_nuevoAlumno;
my $entApellido_nuevoAlumno;
my $labEdad_nuevoAlumno;
my $entEdad_nuevoAlumno;
my $labCurso_nuevoAlumno;
my $entCurso_nuevoAlumno;
my $boton_nuevoAlumno;


my $dni;
my $nombre;
my $apellido;
my $edad;
my $curso;


my $frame_ver_todos = $ventana;	
my $frame2_ver_todos = $ventana;
my $txt_ver_todos = $frame2_ver_todos;
my $srl_y = $frame2_ver_todos;
my $srl_x = $frame2_ver_todos;


my $etiqueta_introducir_dni;
my $ent_dni;
my $boton_aceptar_dni;
my $boton_exportar;

my $ent_nombre_fichero;
my $lab_nombre_fichero;

   $ventana = new MainWindow;
   $ventana->geometry("300x250"); # damos el tamaño en anchura y altura
   $ventana->resizable( 0, 0 ); # no dejaremos que la redimensionen
    
   $menu = $ventana->Menu(-type => 'menubar');
   $ventana->configure(-menu => $menu);

  
   my $opacion_1 = $menu->cascade(-label => '~Archivo', -tearoff => 0);
   
   $opacion_1->command(-label => '~Nuevo Alumno', -accelerator => 'Control+n', -command => \&func_nuevo_alumno); 
   $opacion_1->command(-label => '~Borrar Alumno', -accelerator => 'Control+b', -command => \&func_borrar_alumno); 
   $opacion_1->command(-label => '~Salir', -accelerator => 'Control+d', -command => \&func_salir); 
   
   my $opacion_2 = $menu->cascade(-label => '~Edición', -tearoff => 0);
   $opacion_2->command(-label => '~Editar alumno)', -accelerator => 'Control+e', -command => \&func_editar);
   
   my $opacion_4 = $menu->cascade(-label => '~Ver', -tearoff => 0);
   $opacion_4->command(-label => '~Ver todos los alumnos inscritos)', -accelerator => 'Control+v', -command => \&func_ver_todos);
   $opacion_4->command(-label => '~Exportar en txt)', -accelerator => 'Control+v', -command => \&fun_exportar);
   
   
   my $opacion_3 = $menu->cascade(-label => '~Acerca de...', -tearoff => 0);
   $opacion_3->command(-label => '~Acerca de ... )', -accelerator => '', -command => \&acercaDe);
    
   MainLoop;
   
   sub func_salir{
       
       exit;
   }
   sub func_borrar{
	   
       $etiqueta->packForget;
   }
   sub func_nuevo_alumno{
	
	borrar($ultima_ventana);   
	$ultima_ventana = 1;
	
	$labDatosPersonales_nuevoAlumno = $ventana -> Label(-text=>"--Datos personales--") -> pack();
	$labDni_nuevoAlumno = $ventana -> Label(-text=>" Dni:") -> pack();
	$entDni_nuevoAlumno = $ventana -> Entry() -> pack();
	$labNombre_nuevoAlumno = $ventana -> Label(-text=>" Nombre:") -> pack();
	$entNombre_nuevoAlumno = $ventana -> Entry() -> pack();
	$labApellido_nuevoAlumno = $ventana -> Label(-text=>" Primer apellido:") -> pack();
	$entApellido_nuevoAlumno = $ventana -> Entry() -> pack();
	$labEdad_nuevoAlumno = $ventana -> Label(-text=>" Edad:") -> pack();
	$entEdad_nuevoAlumno = $ventana -> Entry() -> pack();
	$labCurso_nuevoAlumno = $ventana -> Label(-text=>" Curso:") -> pack();
	$entCurso_nuevoAlumno = $ventana -> Entry() -> pack();
    $boton_nuevoAlumno = $ventana -> Button(-text => "Ok",-command =>\&func_insertar_alumno);#Pinchar es el nombre de la función para 
       $boton_nuevoAlumno -> pack(); 
  			
   }
   sub func_insertar_alumno(){
   
        $dni = $entDni_nuevoAlumno ->get();
		$nombre = $entNombre_nuevoAlumno->get();
		$apellido = $entApellido_nuevoAlumno->get();
		$edad = $entEdad_nuevoAlumno ->get();
		$curso = $entCurso_nuevoAlumno -> get(); 
	    #my $result = `principal.pl -i $dni $nombre $apellido $edad $curso`; 
	    
	    my $result = controlador->funcion_controlador("-i",$dni,$nombre,$apellido,$edad,$curso); 
	    
	    $etiqueta = $ventana->Label( -text => "Alumno insertado con éxito." );
        $etiqueta->pack();
         
        borrar($ultima_ventana);
         
        $ultima_ventana = 5;#para que borre más tarde la etiqueta  
        print"Insertado Alumno : DNI:$dni Nombre:$nombre Apellido:$apellido Edad:$edad Curso:$curso";
   }
   sub func_ver_todos(){
    
       borrar($ultima_ventana);   
	   $ultima_ventana = 2;
        
         #my @result = `principal.pl -v`; 
         my @result=$controlador->funcion_controlador("-v");       
         
         $frame_ver_todos = $ventana -> Frame();			
	
	     $frame_ver_todos = $ventana -> Frame();	
		 $frame2_ver_todos = $ventana -> Frame();
		 $txt_ver_todos = $frame2_ver_todos -> Text(-width=>40, -height=>10);
		 $srl_y = $frame2_ver_todos -> Scrollbar(-orient=>'v',-command=>[yview => $txt_ver_todos]);
		 $srl_x = $frame2_ver_todos -> Scrollbar(-orient=>'h',-command=>[xview => $txt_ver_todos]);
		 $txt_ver_todos -> configure(-yscrollcommand=>['set', $srl_y], -xscrollcommand=>['set',$srl_x]);

        $frame_ver_todos -> grid(-row=>1,-column=>1,-columnspan=>2);	
		$txt_ver_todos -> grid(-row=>1,-column=>1);
		$srl_y -> grid(-row=>1,-column=>2,-sticky=>"ns");
		$srl_x -> grid(-row=>2,-column=>1,-sticky=>"ew");
		$frame2_ver_todos -> grid(-row=>5,-column=>1,-columnspan=>2);
		
		$frame_ver_todos->pack();	
		$txt_ver_todos->pack();
		$srl_y->pack();
		$srl_x->pack();
		$frame2_ver_todos->pack();

		#___________________________________________________________       
         
         tie *STDOUT, ref $txt_ver_todos, $txt_ver_todos;
         my @alum_aux;
         foreach $alumno (@result) {
		 
		    @alum_aux = split(",",$alumno);
		    print "--------------------------\n";
			print "Dni: $alum_aux[0] \n";
	        print "Nombre: $alum_aux[1] \n";
	        print "1er.Apellido: $alum_aux[2] \n";
	        print "Edad: $alum_aux[3] \n";
	        print "Curso: $alum_aux[4] \n";
	        print "--------------------------\n";
	     }         
         #___________________________________________________________
	}
   sub fun_exportar(){
		
	   borrar($ultima_ventana);   
	   $ultima_ventana = 7;
	   
	   $lab_nombre_fichero = $ventana->Label( -text => "Introduzca el nombre del fichero:" )->pack();
	   $ent_nombre_fichero = $ventana -> Entry()->pack(); 
	   $boton_exportar = $ventana -> Button(-text => "Ok",-command =>\&exportar_a_archivo)->pack();  
   }  
   sub exportar_a_archivo{
        
        my $nombreFichero = $ent_nombre_fichero->get();
		my @result = $controlador->funcion_controlador("-v");		
		open(File, ">".$nombreFichero.".txt") or die 'no se puede abrir el fichero!';  		
		foreach $alumno (@result) {
		 
		    @alum_aux = split(",",$alumno);
		    print File "--------------------------\n";
			print File "Dni: $alum_aux[0] \n";
	        print File "Nombre: $alum_aux[1] \n";
	        print File "1er.Apellido: $alum_aux[2] \n";
	        print File "Edad: $alum_aux[3] \n";
	        print File "Curso: $alum_aux[4] \n";
	        print File "--------------------------\n";
	     } 
	    close(File);
   }   
   sub func_editar(){
       
       borrar($ultima_ventana);   
	   $ultima_ventana = 3;
       
       #mostrar mensaje : Introduzca el dni del alumno: 
       $etiqueta_introducir_dni = $ventana->Label( -text => "Por favor introduzca el dni:" );
       $etiqueta_introducir_dni->pack();
       $ent_dni = $ventana -> Entry() -> pack();
       $boton_aceptar_dni = $ventana -> Button(-text => "Aceptar",-command =>\&buscar_dni);
       $boton_aceptar_dni->pack();
   }
   sub buscar_dni(){
	     
	   $dni = $ent_dni->get();
	   
	    my @result = $controlador->funcion_controlador("-b",$dni);
	    
	    if(@result==0){		
			$ventana -> messageBox(-type=>"Ok", -message=>"Dni no encontrado");
		}else{
             foreach $alumno (@result) {#se supone que  solo debe haber uno elemento en @result
		 
				@alum_aux = split(",",$alumno);
				
				$dni = $alum_aux[0];
			    $nombre = $alum_aux[1]; 
			    $apellido = $alum_aux[2]; 
			    $edad = $alum_aux[3];
			    $curso = $alum_aux[4]; 
				
				print "Dni: $dni \n";
				print "Nombre: $nombre \n";
				print "1er.Apellido: $apellido \n";
				print "Edad: $edad \n";
				print "Curso: $curso \n";
			}         				
			 
		     mostrar_alumno();
		}
   }
   sub mostrar_alumno(){
       
       borrar($ultima_ventana);   
	   $ultima_ventana = 4;
	   
	$labDatosPersonales_nuevoAlumno = $ventana -> Label(-text=>"--Datos personales--") -> pack();
	$labDni_nuevoAlumno = $ventana -> Label(-text=>" Dni:") -> pack();
	$entDni_nuevoAlumno = $ventana -> Entry(-text=>$dni) -> pack();

	$labNombre_nuevoAlumno = $ventana -> Label(-text=>" Nombre:") -> pack();
	$entNombre_nuevoAlumno = $ventana -> Entry(-text=>$nombre) -> pack();
	
	
	$labApellido_nuevoAlumno = $ventana -> Label(-text=>" Primer apellido:") -> pack();
	$entApellido_nuevoAlumno = $ventana -> Entry(-text=>$apellido) -> pack();
	
		
	$labEdad_nuevoAlumno = $ventana -> Label(-text=>" Edad:") -> pack();
	$entEdad_nuevoAlumno = $ventana -> Entry(-text=>$edad) -> pack();
	
	
	$labCurso_nuevoAlumno = $ventana -> Label(-text=>" Curso:") -> pack();
	$entCurso_nuevoAlumno = $ventana -> Entry(-text=>$curso) -> pack();
   	
    
    $boton_nuevoAlumno = $ventana -> Button(-text => "Aceptar",-command =>\&func_insertar_alumno_editado);#Pinchar es el nombre de la función para 
    $boton_nuevoAlumno -> pack(); 
	   
   }
   sub func_insertar_alumno_editado(){
	  
	  borrar($ultima_ventana);   
	  $ultima_ventana = 5;	  
	     
      $etiqueta = $ventana->Label( -text => "Alumno editado con éxito." );
      $etiqueta->pack();	  
	  
	  $controlador->funcion_controlador("-x",$dni);#con esto primero borramos el alumno 
	  func_insertar_alumno();                      #después lo insertamos modificado
   }
   sub func_borrar_alumno(){
      borrar($ultima_ventana);   
	  $ultima_ventana = 6;		  
	  
	   #mostrar mensaje : Introduzca el dni del alumno: 
       $etiqueta_introducir_dni = $ventana->Label( -text => "Por favor introduzca el dni:" );
       $etiqueta_introducir_dni->pack();
       $ent_dni = $ventana -> Entry() -> pack();
       $boton_aceptar_dni = $ventana -> Button(-text => "Aceptar",-command =>\&borrar_alumno);
       $boton_aceptar_dni->pack();  
   }
   sub borrar_alumno(){
      
      borrar($ultima_ventana);   
	  $ultima_ventana = 5;	
      
      $dni = $ent_dni->get();
      $controlador->funcion_controlador("-x",$dni);
      
      $etiqueta = $ventana->Label( -text => "Alumno borrado..." );
      $etiqueta->pack();
   }
   sub acercaDe{
	
       $ventana -> messageBox(-type=>"ok", -message=>"  Copyright 2012 César Serrano López This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>

													   "); 
   }
   sub borrar{
    
      if($_[0] == 0 ){
	       
	       $etiqueta->packForget;
	  }  
      elsif($_[0] == 1 ){
		  
		    $labDatosPersonales_nuevoAlumno->packForget;
			$labDni_nuevoAlumno->packForget;
			$entDni_nuevoAlumno->packForget;
			$labNombre_nuevoAlumno->packForget;
			$entNombre_nuevoAlumno->packForget;
			$labApellido_nuevoAlumno->packForget;
			$entApellido_nuevoAlumno->packForget;
			$labEdad_nuevoAlumno->packForget;
			$entEdad_nuevoAlumno->packForget;
			$labCurso_nuevoAlumno->packForget;
		    $entCurso_nuevoAlumno->packForget;
			$boton_nuevoAlumno->packForget;
	   }
      elsif($_[0] == 2){
	        
			$frame_ver_todos->packForget;	
			$frame2_ver_todos->packForget;
			$txt_ver_todos->packForget;
			$srl_y->packForget;
			$srl_x->packForget;
	  }
	  elsif($_[0] == 3){
	      
	        $etiqueta_introducir_dni->packForget;
	        $ent_dni->packForget;
	        $boton_aceptar_dni->packForget;
	  }
	   elsif($_[0] == 4){
            
            $labDatosPersonales_nuevoAlumno->packForget;
			$labDni_nuevoAlumno->packForget;
			$entDni_nuevoAlumno->packForget;
			$labNombre_nuevoAlumno->packForget;
			$entNombre_nuevoAlumno->packForget;
			$labApellido_nuevoAlumno->packForget;
			$entApellido_nuevoAlumno->packForget;
			$labEdad_nuevoAlumno->packForget;
			$entEdad_nuevoAlumno->packForget;
			$labCurso_nuevoAlumno->packForget;
		    $entCurso_nuevoAlumno->packForget;
			$boton_nuevoAlumno->packForget;
      }
      elsif($_[0] == 5){
	        
	        
            $etiqueta->packForget();
	  }
	  elsif($_[0] == 6){
	        
	        $etiqueta_introducir_dni->packForget;
	        $ent_dni->packForget;
	        $boton_aceptar_dni->packForget;	        
	  }
	  elsif($_[0] == 7){
	        
		   $lab_nombre_fichero->packForget;
		   $ent_nombre_fichero->packForget;
		   $boton_exportar->packForget; 	              
	  }
   }
